#if _DEBUG

#include <cppunit/config/SourcePrefix.h>
#include "ProcTableTest.h"

void ProcTableTest::setUp()
{
}

void ProcTableTest::tearDown()
{
}

CPPUNIT_TEST_SUITE_REGISTRATION( ProcTableTest );

void ProcTableTest::testPreInsert()
{
	ProcTable proc_table;

	PROCINDEX_ARRAY ppp = proc_table.GetAllProcIndex();
	CPPUNIT_ASSERT(ppp.size()==0);

	STRING_ARRAY string_array = proc_table.GetAllProcNames();
	CPPUNIT_ASSERT(string_array.size()==0);
}

void ProcTableTest::testInsert()
{
	ProcTable proc_table;
	CPPUNIT_ASSERT(-1 != proc_table.InsertProc("ProcX"));
	CPPUNIT_ASSERT(-1 != proc_table.InsertProc("ProcY"));
	CPPUNIT_ASSERT(-1 != proc_table.InsertProc("ProcZ"));
	CPPUNIT_ASSERT(-1 != proc_table.InsertProc("ProcA"));
	CPPUNIT_ASSERT(-1 != proc_table.InsertProc("ProcB"));
	CPPUNIT_ASSERT(-1 != proc_table.InsertProc("ProcB"));
	CPPUNIT_ASSERT(-1 != proc_table.InsertProc("ProcC"));
	CPPUNIT_ASSERT(-1 == proc_table.InsertProc("0acc"));
}

void ProcTableTest::testGetProcIndex()
{
	ProcTable proc_table;
	CPPUNIT_ASSERT(-1 == proc_table.GetProcIndex("Fibo"));

	proc_table.InsertProc("ProcX");
	proc_table.InsertProc("ProcY");
	proc_table.InsertProc("ProcZ");
	proc_table.InsertProc("ProcA");
	proc_table.InsertProc("ProcB");
	proc_table.InsertProc("ProcB");
	proc_table.InsertProc("ProcC");

	CPPUNIT_ASSERT(0 == proc_table.GetProcIndex("ProcX"));
	CPPUNIT_ASSERT(5 == proc_table.GetProcIndex("ProcC"));
	CPPUNIT_ASSERT(-1 == proc_table.GetProcIndex("G"));
}

void ProcTableTest::testGetProcName()
{
	ProcTable proc_table;
	CPPUNIT_ASSERT("" == proc_table.GetProcName(1));

	proc_table.InsertProc("ProcX");
	proc_table.InsertProc("ProcY");
	proc_table.InsertProc("ProcZ");
	proc_table.InsertProc("ProcA");
	proc_table.InsertProc("ProcB");
	proc_table.InsertProc("ProcB");
	proc_table.InsertProc("ProcC");

	CPPUNIT_ASSERT("ProcX" == proc_table.GetProcName(0));
	CPPUNIT_ASSERT("ProcA" == proc_table.GetProcName(3));
	CPPUNIT_ASSERT("ProcY" == proc_table.GetProcName(1));
	CPPUNIT_ASSERT("" == proc_table.GetProcName(100));
}

void ProcTableTest::testGetProcStatementRange()
{
	ProcTable proc_table;

	proc_table.InsertProc("ProcX");
	proc_table.InsertProc("ProcY");
	proc_table.InsertProc("ProcZ");
	proc_table.InsertProc("ProcA");
	proc_table.InsertProc("ProcB");
	proc_table.InsertProc("ProcC");




	proc_table.SetProcStatementRange(proc_table.GetProcIndex("ProcC"), 1, 20);
	CPPUNIT_ASSERT(1==proc_table.GetProcFirstStatementNumber(proc_table.GetProcIndex("ProcC")) && 20==proc_table.GetProcLastStatementNumber(proc_table.GetProcIndex("ProcC")));

	CPPUNIT_ASSERT(-1==proc_table.GetProcFirstStatementNumber(proc_table.GetProcIndex("ProcB")) && -1==proc_table.GetProcLastStatementNumber(proc_table.GetProcIndex("ProcB")));

	CPPUNIT_ASSERT(-1==proc_table.GetProcFirstStatementNumber(proc_table.GetProcIndex("KKK")) && -1==proc_table.GetProcLastStatementNumber(proc_table.GetProcIndex("KKK")));
	proc_table.SetProcStatementRange(500, 21, 33);
	CPPUNIT_ASSERT(-1==proc_table.GetProcFirstStatementNumber(proc_table.GetProcIndex("KKK")) && -1==proc_table.GetProcLastStatementNumber(proc_table.GetProcIndex("KKK")));

	PROCINDEX idx = proc_table.InsertProc("KKK");
	proc_table.SetProcStatementRange(idx, 21, 33);
	CPPUNIT_ASSERT(21==proc_table.GetProcFirstStatementNumber(idx) && 33==proc_table.GetProcLastStatementNumber(idx));

	idx = proc_table.InsertProc("KKK");
	proc_table.SetProcStatementRange(idx, 21, 44);
	CPPUNIT_ASSERT(21==proc_table.GetProcFirstStatementNumber(idx) && 33==proc_table.GetProcLastStatementNumber(idx));
}

void ProcTableTest::testGetAllProcIndex()
{
	ProcTable proc_table;

	proc_table.InsertProc("ProcX");
	proc_table.InsertProc("ProcY");
	proc_table.InsertProc("ProcZ");
	proc_table.InsertProc("ProcA");
	proc_table.InsertProc("ProcB");
	proc_table.InsertProc("ProcC");




	PROCINDEX_ARRAY p_array = proc_table.GetAllProcIndex();
	CPPUNIT_ASSERT(6 == p_array.size());

	auto it = p_array.find(0);
	CPPUNIT_ASSERT(proc_table.GetProcName(*it) == "ProcX");
	it = p_array.find(1);
	CPPUNIT_ASSERT(proc_table.GetProcName(*it) == "ProcY");
	it = p_array.find(2);
	CPPUNIT_ASSERT(proc_table.GetProcName(*it) == "ProcZ");
	it = p_array.find(3);
	CPPUNIT_ASSERT(proc_table.GetProcName(*it) == "ProcA");
	it = p_array.find(4);
	CPPUNIT_ASSERT(proc_table.GetProcName(*it) == "ProcB");
	it = p_array.find(5);
	CPPUNIT_ASSERT(proc_table.GetProcName(*it) == "ProcC");
}

void ProcTableTest::testGetProcIndexByStmtNum()
{
	ProcTable proc_table;

	proc_table.InsertProc("ProcX");
	proc_table.InsertProc("ProcY");
	proc_table.InsertProc("ProcZ");
	proc_table.InsertProc("ProcA");
	proc_table.InsertProc("ProcB");
	proc_table.InsertProc("ProcC");

	proc_table.SetProcStatementRange(proc_table.GetProcIndex("ProcC"), 1, 20);
	PROCINDEX idx = proc_table.InsertProc("KKK");
	proc_table.SetProcStatementRange(idx, 21, 33);

	CPPUNIT_ASSERT(proc_table.GetProcIndex(2) == 5);
	CPPUNIT_ASSERT(proc_table.GetProcIndex(21) == 6);
	CPPUNIT_ASSERT(proc_table.GetProcIndex(23) == 6);
	CPPUNIT_ASSERT(proc_table.GetProcIndex(33) == 6);
	CPPUNIT_ASSERT(proc_table.GetProcIndex(34) == -1);
}

void ProcTableTest::testGetAllProcNames()
{
}

#endif